package cn.genmer.test.security.designpatterns.singleton;

/**
 * @program: concurrency_practice
 * @description: 双检锁（双重检查）- 推荐用
 * @author: Genmer
 * @create: 2020-10-21 01:04
 **/
public class Singleton6 {
    // 构造方法和对象都是私有的 volatile解决指令重拍重排序问题，因为new对象不是原子操作
    private volatile static Singleton6 INSTANCE;

    // 这方式构造方法内容
    private Singleton6(){}

    public static Singleton6 getInstance(){
        if (INSTANCE == null){
           synchronized (Singleton6.class){
             if (INSTANCE == null){
                 INSTANCE = new Singleton6();
             }
           }
        }
        return INSTANCE;
    }
}
